
## Задача 29 Тип 27 [№ 45261](https://inf-ege.sdamgia.ru/problem?id=45261)

На каждом 3-м километре кольцевой автодороги с двусторонним движением установлены контейнеры для мусора.

Длина кольцевой автодороги равна 3N километров. Нулевой километр и 3N-й километр автодороги находятся в одной точке.

Известно количество мусора, которое накапливается ежедневно в каждом из контейнеров. Из каждого пункта мусор вывозит отдельный мусоровоз.

Стоимость доставки мусора вычисляется как произведение количества мусора на расстояние от пункта до центра переработки.

Центр переработки отходов открыли в одном из пунктов сбора мусора таким образом, чтобы общая стоимость доставки мусора из всех пунктов в этот центр была минимальной.

Определите минимальные расходы на доставку мусора в центр переработки отходов.

Входные данные

[27_A.txt](https://inf-ege.sdamgia.ru/get_file?id=109216)

[27_B.txt](https://inf-ege.sdamgia.ru/get_file?id=109217)



Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000)  — количество пунктов сбора мусора на кольцевой автодороге.

В каждой из следующих N строк находится число  — количество мусора в контейнере (все числа натуральные, количество мусора в каждом пункте не превышает 1000).

Числа указаны в порядке расположения контейнеров на автомагистрали, начиная с первого километра.

В ответе укажите два числа: сначала значение искомой величины для файла А, затем  — для файла B.

Типовой пример организации данных во входном файле
```
6
8
20
5
13
7
19
```

При таких исходных данных, если контейнеры установлены на каждом километре автодороги, необходимо открыть центр переработки в пункте 6. В этом случае сумма транспортных затрат составит:
```
1 * 7 + 0 * 19 + 1 * 8 + 2 * 20 + 3 * 5 + 2 * 13.
```

### Решение на 1 балл
```python
# f = open('27/29 (мусор на кольцевой)/txt.txt')
f = open('27/29 (мусор на кольцевой)/107_27_A.txt')

N = int(f.readline())
S = tuple(int(x) * 3 for x in f)
half_len = len(S) / 2
count = 0
min_dist = 10**10
for i in range(N):
    all_distans = 0
    for i in range(1, int(half_len) + 1):
        if i == half_len:
            all_distans += (S[i] * i)
        else:
            all_distans += (S[i] * i + S[-i] * i)
    min_dist = min(min_dist, all_distans)
    S = S[1:] + (S[0],)
    print(1)

print(min_dist)
```

### Решение на 2 балла
```python
f = open('27/29 (мусор на кольцевой)/txt.txt')
f = open('27/29 (мусор на кольцевой)/107_27_B.txt')

N = int(f.readline())

points = [int(x) * 3 for x in f]
distanse = [0] * N
right_sum = 0
left_sum = 0
sum_0 = 0


for i in range(1, N // 2 + 1):
    if i == N / 2:
        sum_0 += (points[i] * i)
    else:
        sum_0 += (points[i] * i + points[-i] * i)
    
    right_sum += points[i]
    left_sum += points[N - i]


distanse[0] = sum_0

for i in range(1, N):
    shift = left_sum - right_sum
    left_point = points[(i + (N // 2) - 1) % N]
    right_point = points[(i - (N // 2)) % N]
   
    distanse[i] = distanse[i - 1] + points[i - 1] - left_point + shift
    right_sum += left_point - points[i] 
    left_sum += points[i-1] - right_point

print(min(distanse))


```